---
title: "Módulo de Gráficos y Visualización de datos"
# author: "PabloTe"
# date: "`r Sys.Date()`"
output:
  xaringan::moon_reader:
    lib_dir: libs
    css: ["xaringan-themer.css", "ninjutsu"]
    nature:
      highlightLines: yes
      ratio: '16:9'
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, warning = F, message = F)
knitr::opts_chunk$set(fig.height = 6, out.width = "100%", comment = " ", cache = T, dpi = 300)
try(source("https://raw.githubusercontent.com/EvaMaeRey/little_flipbooks_library/master/xaringan_reveal_parentheses_balanced.R"))
try(source("../flipbooks/xaringan_reveal_parentheses_balanced.R"))

options(scipen = 9999)
```


```{r xaringan-themer, include = FALSE, eval = F}
xaringanthemer::mono_accent(
   <- _color = "#43418A",
  header_font_google = google_font("Montserrat"),
  text_font_google   = google_font("Montserrat", "200", "200i"),
  code_font_google   = google_font("Droid Mono"),
  text_font_size = ".7cm",
  code_font_size = ".7cm")

library(quantreg)
```

# Repasando

<br>

- Empezamos a ver los fundamentos del lenguaje R.

<br>

- Incorporamos la forma de trabajo a través de objetos.

<br>

- Empezamos a importar bases de datos, a procesar la información que hay dentro de ellas

<br>

- Conocimos algunas funciones para transformar sus elementos (variables, categorías, filas, columnas)

---

class: middle, center, inverse

# Visualización de datos - Paquete ggplot2

---

### ¿Por qué visualizar?

<br> 

- _"La visualización es el proceso de hacer visibles los contrastes, ritmos y eventos que los datos expresan, que no podemos percibir cuando vienen en forma de áridas listas de números y categorías."_ [^1]

<br>
  
- Interpretar / decodificar la información de forma visual

<br>


[^1]: https://bitsandbricks.github.io/ciencia_de_datos_gente_sociable/visualizacion.html

---
### El paquete ggplot2

<br>

--

- _ggplot2_ es uno de los paquetes principales de _tidyverse_

<br>

--

- Tiene la misma lógica de "capas" y de apilamiento de sentencias, como venimos haciendo con el comando __%>%__, pero ahora lo haremos con el símbolo __+__

--

- Necesitamos estructurar los datos de forma "vertical" (¿gather suena familiar?), es decir, una columna por cada dimensión (variable) y una fila por cada observación. Estructurar bien los datos ahorra muchos dolores de cabeza.

  
---
### Manos a la obra

<br>

Queremos analizar de forma descriptiva una o más variables. Intentemos con las herramientas que aprendimos hasta el momento.
  
<br>

--

Si queremos, por ejemplo, ver cómo se comporta el ingreso de la población, podemos empezar con el __ingreso de la ocupación princial__ de los individuos.
  
  
Busquemos la variable en el diseño de registro:

```{r echo=FALSE, out.width = '80%', fig.align = 'center'}
knitr::include_graphics("img/dis_reg_p21.png")
```

---
### Librerías

<br>

* Cargamos las librerías necesarias 

```{r libreria, echo=TRUE, warning=FALSE}
library(tidyverse)
library(questionr)
library(eph)
```

<br>

* Descargamos la base de datos con la función del paquete _eph_ para bajar los microdatos

```{r base, echo=TRUE, warning=FALSE}
base <- eph::toybase_individual_2016_04 %>% 
  select(ESTADO, NIVEL_ED, CH04, PONDERA, P21, TOT_P12, PONDIIO)
```

---

## El primer paso antes de hacer un gráfico es saber qué quiero mostrar y con qué tipo de datos cuento

--

### Analicemos la variable:

--

```{r echo=TRUE}
class(base$P21)
```

--

```{r echo=TRUE}
any(is.na(base$P21))
```

--

```{r echo=TRUE}
summary(base$P21)
```

---

## Ahora sí, intentemos graficarlo

---

```{r g1, eval = F, echo = F}
ggplot(data = base) +
  aes(x = P21, 
      weights = PONDIIO) +
  geom_histogram()
```


`r apply_reveal("g1")`


---
### Saquemos aquellos valores extremos, para poder analizar mejor la distribución.

<br>

```{r echo=TRUE}
base <- base %>% 
  filter(P21 > 0 & P21 < 200000)
```

--

<br>

Tiramos el summary nuevamente
```{r echo=TRUE}
summary(base$P21)
```

---

```{r g2, eval = F, echo = F, warning=F}
ggplot(data = base) +
  aes(x = P21, 
      weights = PONDIIO) +
  geom_histogram(fill = "salmon", 
                 color = "grey")
```


`r apply_reveal("g2")`


---

## Gráficos de Boxplot

### ¿Y si la distribución del ingreso se comporta de manera diferente en función de otra variable?

- Probemos con otro tipo de gráfico que nos deje comparar, en este caso, para los distintos niveles educativos alcanzados

En el diseño de registro esta variable la encontramos como __NIVEL_ED__
```{r echo=FALSE, out.width = '80%', fig.align = 'center'}
knitr::include_graphics("img/dis_reg_nivel_ed.png")
```

---

```{r boxplot, eval = F, echo = F}
ggplot(data = base) +
  aes(x = NIVEL_ED) + 
  aes(y = P21) +
  geom_boxplot() +
  aes(group = NIVEL_ED)
```


`r apply_reveal("boxplot")`

---

## Mucho mejor! Pero... ¿Qué pasó con las categorías? ¿Cómo las muestro?

--

- Tal como se descarga la base de la página del INDEC, vemos que la variable __NIVEL_ED__ es de tipo "entero".

```{r echo=TRUE}
class(base$NIVEL_ED)
```

--

```{r echo=TRUE}
table(base$NIVEL_ED)
```

--

Transformemos, entonces, a _NIVEL_ED_ en una variable de tipo _factor_, asi podremos contar con las etiquetas e, incluso, reordenar sus categorías de forma ordinal
  
---

```{r echo=TRUE}
base <- base %>% 
  mutate(NIVEL_ED = factor(NIVEL_ED,
                           levels = c(7,1:6),
                           labels = c("Sin instruccion", "Primaria incompleta", "Primaria completa",
                                      "Secundaria incompleta", "Secundaria completa",
                                      "Sup. incompleto", "Sup. completo")))
```

Tiramos una frecuencia para chequear el trabajo hecho
```{r echo=TRUE}
table(base$NIVEL_ED)
```

---
## Gráficos de Boxplot

### Ahora sí, con etiquetas en la variable, sumemos otros parámetros del gráfico

---


```{r g3, eval = F, echo = F}
ggplot(data = base) +
  aes(x = NIVEL_ED) +
  aes(y = P21) +
  geom_boxplot() +
  aes(group = NIVEL_ED) +
  aes(fill = NIVEL_ED) +
  theme_minimal() +
  labs(x = "Máximo nivel educativo alcanzado") +
  labs(y = "Ingreso de la ocupación principal") +
  labs(title = "Boxplot del Ingreso de la Ocupación Principal por máximo nivel de estudios alcanzado") +
  labs(caption = "Fuente: Elaboración propia en base a EPH-INDEC") +
  scale_y_continuous(limits = c(0, 100000)) +
  coord_flip()
```


`r apply_reveal("g3")`


---
class: middle, center, inverse

## Gráficos de densidad

### Probemos con otro tipo de gráfico, que ayude a comparar mejor (que es nuestro objetivo)

---


```{r g4, eval = F, echo = F}
ggplot(data = base) +
  aes(x = P21) +
  geom_density() +
  aes(group = NIVEL_ED) +
  aes(color = NIVEL_ED) +
  theme_minimal() +
  labs(x = "Máximo nivel educativo alcanzado", 
       y = "Ingreso de la ocupación principal",
       title = "Ingreso de la Ocupación Principal por máximo nivel de estudios alcanzado",
       caption = "Fuente: Elaboración propia en base a EPH-INDEC")
```


`r apply_reveal("g4")`


---
class: middle, center, inverse

## Gráficos de densidad

### Todavía falta, el gráfico no es claro y la información está muy amontonada. ¿Y si separamos los gráficos por categoría?
  
---

```{r g5, eval = F, echo = F}
ggplot(data = base) +
  aes(x = P21) +
  geom_density() +
  aes(group = NIVEL_ED) +
  aes(color = NIVEL_ED) +
  theme_minimal() +
  labs(x = "Máximo nivel educativo alcanzado", 
       y = "Ingreso de la ocupación principal",
       title = "Ingreso de la Ocupación Principal por máximo nivel de estudios alcanzado",
       caption = "Fuente: Elaboración propia en base a EPH-INDEC") +
  facet_wrap(~ NIVEL_ED) +
  scale_x_continuous(limits = c(0, 100000))
```


`r apply_reveal("g5")`


---
class: middle, center, inverse

## Gráficos de Barras

### Ahora queremos conocer cómo se distribuye la población en función del máximo nivel educativo alcanzado

---

- Observemos un poco más sobre la variable con las herramientas que conocemos
```{r echo=TRUE}
base %>% 
  calculate_tabulates(x = "NIVEL_ED",
                      add.totals = "row",
                      add.percentage = "col",
                      weights = "PONDERA")
```

---

¿Y si la cruzamos por sexo?

```{r echo=TRUE}
base %>% 
  calculate_tabulates(x = "NIVEL_ED",
                      y = "CH04",
                      add.totals = "row",
                      add.percentage = "col",
                      weights = "PONDERA")
```

---

Nuevamente, tenemos que editar la variable para poder trabajar con las etiquetas:
```{r echo=TRUE}
base <- base %>% 
  mutate(CH04 = factor(CH04,
                       levels = c(1, 2),
                       labels = c("Varón", "Mujer")))
table(base$CH04)
```

---

Creamos el objeto `base_graf`, en donde asignamos el resultado del tabulado, con algunas modificaciones para trabajar más cómodxs en el gráfico.

```{r echo=TRUE}
base_graf <- base %>% 
  group_by(CH04, NIVEL_ED) %>% 
  summarise(cantidad = sum(PONDERA)) %>% 
  mutate(porcentaje  = cantidad / (sum(cantidad))* 100) %>%
  mutate(porcentaje  = round(porcentaje, 1))

base_graf
```

```{r include = FALSE}
# base_graf <- base %>% 
#   calculate_tabulates(x = "NIVEL_ED",
#                       y = "CH04",
#                       add.percentage = "col",
#                       weights = "PONDERA") %>% 
#   rename(nivel_ed = `NIVEL_ED/CH04`) %>%
#   pivot_longer(cols = c("Varón", "Mujer"), names_to = "Sexo", values_to = "Porcentaje")
# 
# base_graf
```
---

```{r g6, eval = F, echo = F}
ggplot(data = base_graf, 
       aes(x = NIVEL_ED,
           y = porcentaje, 
           fill = CH04)) +
  geom_bar(color = "black", 
           position = "dodge",
           stat = "identity") +
  scale_fill_manual(values = c("forestgreen", "salmon")) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 35, 
                                   vjust = 0.5)) +
  labs(title = "Distribución porcentual de la población \n según máximo nivel educativo alcanzado y sexo.",
       subtitle = "Total aglomerados, base _podada_. Año 2016, trimestre 4.",
       caption = "Fuente: EPH-INDEC",
       fill = "Sexo") +
  geom_text(aes(label = porcentaje, group = CH04), 
            position = position_dodge(0.9),
            vjust = -0.5)
```

`r apply_reveal("g6")`



